package LeetCode.interview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.sun.corba.se.impl.orbutil.graph.Node;

import LeetCode.interview._104_Maximum_Depth_of_Binary_Tree.TreeNode;
import sun.tools.jar.resources.jar;
import util.LogUtils;
import util.datastructure.ListNode;

/*
 * 
原题　
		Remove all elements from a linked list of integers that have value val.
	
	Example
	Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
	Return: 1 --> 2 --> 3 --> 4 --> 5
	
	Credits:
	Special thanks to @mithmatt for adding this problem and creating all test cases.
题目大意
		普通的链表删除节点
解题思路
	
 * @Date 2017-09-22 01:29
 */
public class _203_Remove_Linked_List_Elements {
	
	/**
	 * 法二：递归：
	 * 	我们也可以用递归来解，写法很简洁，通过递归调用到链表末尾，然后回来，需要要删的元素，将链表next指针指向下一个元素即可：
	 * @param head
	 * @param val
	 * @return
	 */
    public ListNode removeElements(ListNode head, int val) {
        if (head == null)	return null;
        head.next = removeElements(head.next, val);
        return head.val==val ? head.next : head; 
    }
    
	public static void main(String[] args) {
		_203_Remove_Linked_List_Elements obj = new _203_Remove_Linked_List_Elements();
//		obj.twoSum(new int[]{1, 2, 3, 4, 5, 6, 7}, 7);
//		obj.twoSum2(new int[]{2, 7, 11, 15}, 9);
		ListNode list = ListNode.newLinkList2();
		obj.removeElements(list, 9);
		
		ListNode.traverse("remove", list);
	}

}
